import { ref } from "vue";
import { accountApi } from "@/api/authority";
import { IObject } from "@/types/interface";

/**
 * 账号管理 - 业务数据与接口适配
 * 说明：本文件统一定义账号模块的数据结构与 API 调用封装
 */

/** 用户数据结构（与后端返回保持对齐） */
interface UserData {
  id: string;                     // 账号ID（string）
  username: string;               // 用户名
  email: string;                  // 邮箱账号
  mobile: string;                 // 电话号码
  roleId: number;                 // 角色ID
  role: string;                   // 角色名称
  status: number;                 // 状态：1启用，0禁用
  note: string;                   // 备注
  createDate: string;             // 创建时间
  updateDate: string;             // 修改时间
  modifyUser: string;             // 修改人
  // 详情可能包含的扩展字段
  realName?: string | null;       // 真实姓名
  headUrl?: string | null;        // 头像URL
  gender?: string | null;         // 性别
  deptId?: string | null;         // 部门ID
  organId?: string;               // 组织ID
  superAdmin?: number;            // 超级管理员标识
  roleIdList?: number[];          // 角色ID列表
  deptName?: string | null;       // 部门名称
}

/** 用户列表查询参数 */
interface QueryParams {
  page?: number;                  // 页码
  limit?: number;                 // 每页数量（后端使用 limit）
  username?: string;              // 用户名
  email?: string;                 // 邮箱
  organId?: string | null;        // 组织ID（用于数据权限约束）
}

/** 新增账号参数 */
interface CreateUserData {
  username: string;               // 用户名
  email: string;                  // 邮箱账号
  mobile: string;                 // 电话号码
  roleId: string;                 // 角色ID（使用字符串避免长整型精度问题）
  note?: string;                  // 备注
  modifyUser?: string;            // 修改人（创建人）
}

/** 修改账号参数 */
interface UpdateUserData {
  id: string;                     // 账号ID
  username: string;               // 用户名
  roleId: string;                 // 角色ID（后端要求 string）
  modifyUser?: string;            // 修改人
}

/** 修改账号状态参数 */
interface UpdateUserStatusData {
  id: string;                     // 账号ID
  status: number;                 // 状态：1启用，0禁用
}

/** 重置密码参数 */
interface ResetPasswordData {
  userId: string;                 // 用户ID
}

/** 修改密码参数 */
interface UpdatePasswordData {
  password: string;               // 当前密码
  newPassword: string;            // 新密码
}

/** 获取用户列表 */
export const getUserList = async (params: QueryParams) => {
  try {
    // 调用账号分页查询
    const response = await accountApi.getPage(params);
    if (response.code === 0) {
      const list = response.data.list || [];
      return {
        list: list,
        totalCount: response.data.total || 0
      };
    } else {
      console.error('获取用户列表失败:', response.msg);
      return { list: [], totalCount: 0 };
    }
  } catch (error) {
    console.error('获取用户列表错误:', error);
    return { list: [], totalCount: 0 };
  }
};

/** 新增用户 */
export const addUser = async (userData: CreateUserData) => {
  try {
    // 调用新增账号
    const response = await accountApi.create(userData);
    if (response.code === 0) {
      return { success: true, data: response.data, message: '用户添加成功' };
    } else {
      return { success: false, message: response.msg || '用户添加失败' };
    }
  } catch (error) {
    console.error('添加用户错误:', error);
    return { success: false, message: '用户添加失败' };
  }
};

/** 更新用户 */
export const updateUser = async (userData: UpdateUserData) => {
  try {
    // 调用修改账号
    const response = await accountApi.update(userData);
    if (response.code === 0) {
      return { success: true, data: response.data, message: '用户更新成功' };
    } else {
      return { success: false, message: response.msg || '用户更新失败' };
    }
  } catch (error) {
    console.error('更新用户错误:', error);
    return { success: false, message: '用户更新失败' };
  }
};

/** 重置密码 */
export const resetUserPassword = async (userId: string, updateUser?: string) => {
  try {
    // 调用重置密码
    const payload: any = { userId };
    if (updateUser) payload.updateUser = updateUser;
    const response = await accountApi.resetPassword(payload);
    if (response.code === 0) {
      return { success: true, data: response.data, message: '密码重置成功' };
    } else {
      return { success: false, message: response.msg || '密码重置失败' };
    }
  } catch (error) {
    console.error('重置密码错误:', error);
    return { success: false, message: '密码重置失败' };
  }
};

/** 修改密码 */
export const updateUserPassword = async (passwordData: UpdatePasswordData) => {
  try {
    // 调用修改密码
    const response = await accountApi.updatePassword(passwordData);
    if (response.code === 0) {
      return { success: true, data: response.data, message: '密码修改成功' };
    } else {
      return { success: false, message: response.msg || '密码修改失败' };
    }
  } catch (error) {
    console.error('修改密码错误:', error);
    return { success: false, message: '密码修改失败' };
  }
};

/** 启用/禁用用户 */
export const toggleUserStatus = async (userId: string, status: number, updateUser?: string) => {
  try {
    // 调用禁用/启用
    const payload: any = { id: userId, status };
    const response = await accountApi.updateStatus(payload);
    if (response.code === 0) {
      return { 
        success: true, 
        message: status === 1 ? '用户启用成功' : '用户禁用成功' 
      };
    } else {
      return { success: false, message: response.msg || '状态更新失败' };
    }
  } catch (error) {
    console.error('切换用户状态错误:', error);
    return { success: false, message: '状态更新失败' };
  }
};

/** 删除用户 */
export const deleteUser = async (userId: string) => {
  try {
    // 调用删除账号
    const response = await accountApi.delete(userId);
    if (response.code === 0) {
      return { success: true, data: response.data, message: '用户删除成功' };
    } else {
      return { success: false, message: response.msg || '用户删除失败' };
    }
  } catch (error) {
    console.error('删除用户错误:', error);
    return { success: false, message: '用户删除失败' };
  }
};

/** 获取用户详情 */
export const getUserById = async (userId: string) => {
  try {
    // 调用按ID查询
    const response = await accountApi.getById(userId);
    if (response.code === 0) {
      return { success: true, data: response.data };
    } else {
      return { success: false, message: response.msg || '获取用户详情失败' };
    }
  } catch (error) {
    console.error('获取用户详情错误:', error);
    return { success: false, message: '获取用户详情失败' };
  }
};

/** 工具：格式化日期 */
const formatDate = (date: Date) => {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, "0");
  const day = String(date.getDate()).padStart(2, "0");
  const hours = String(date.getHours()).padStart(2, "0");
  const minutes = String(date.getMinutes()).padStart(2, "0");
  const seconds = String(date.getSeconds()).padStart(2, "0");

  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
};